package cn.vehicle.mapper;

import cn.vehicle.domains.entity.SysRolePermissionEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色权限关联Mapper接口
 * 处理角色与权限的绑定、解绑及关联关系查询
 */
public interface SysRolePermissionMapper {

    /**
     * 添加单个角色权限关联（角色绑定单个权限）
     * @param rolePermission 包含roleId和permissionId的关联实体
     * @return 影响行数（1：成功，0：失败，可能因重复绑定）
     */
    int insertRolePermission(SysRolePermissionEntity rolePermission);

    /**
     * 批量添加角色权限关联（角色绑定多个权限）
     * @param rolePermissionList 包含roleId和多个permissionId的关联实体列表
     * @return 影响行数（成功绑定的权限数量）
     */
    int batchInsertRolePermissions(List<SysRolePermissionEntity> rolePermissionList);

    /**
     * 解除单个角色权限关联（角色解绑单个权限）
     * @param rolePermission 包含roleId和permissionId的关联实体
     * @return 影响行数（1：成功，0：失败，可能关联不存在）
     */
    int deleteRolePermission(SysRolePermissionEntity rolePermission);

    /**
     * 根据角色ID解除所有权限关联（角色解绑所有权限）
     * @param roleId 角色ID
     * @return 影响行数（解除的权限数量）
     */
    int deletePermissionsByRoleId(Long roleId);

    /**
     * 根据权限ID解除所有角色关联（权限解绑所有角色）
     * @param permissionId 权限ID
     * @return 影响行数（解除的角色数量）
     */
    int deleteRolesByPermissionId(Long permissionId);

    /**
     * 校验角色权限关联是否已存在（避免重复绑定）
     * @param rolePermission 包含roleId和permissionId的关联实体
     * @return 存在数量（1：已存在，0：不存在）
     */
    int checkRolePermissionExists(SysRolePermissionEntity rolePermission);

    /**
     * 根据角色ID查询关联的所有权限ID
     * @param roleId 角色ID
     * @return 权限ID列表（无关联则返回空列表）
     */
    List<Long> selectPermissionIdsByRoleId(@Param("ids") List<Long> roleId);

    /**
     * 根据权限ID查询关联的所有角色ID
     * @param permissionId 权限ID
     * @return 角色ID列表（无关联则返回空列表）
     */
    List<Long> selectRoleIdsByPermissionId(Long permissionId);
}